package middleware

import (
	"lottery/web/blue/bluebell/controllers"
	"lottery/web/blue/bluebell/pkg/jwt"

	//"bluebell/controllers"
	//"bluebell/pkg/jwt"
	"strings"

	"github.com/gin-gonic/gin"
)

func JWTAuthMiddleware() func(c *gin.Context) {
	return func(c *gin.Context) {
		// HTTP Bearer： https://www.cnblogs.com/qtiger/p/14868110.html#autoid-3-4-0
		// 在 http 请求头当中添加 Authorization: Bearer (token) 字段完成验证
		// 1. 获取请求头中的 Authorization 认证字段信息
		authStr := c.Request.Header.Get("Authorization")
		// 2.
		if authStr == "" {
			controllers.ResponseError(c, controllers.CodeNeedLogin)
			// 停止后序的 handler 处理函数执行，并终止当前后续操作
			c.Abort()
			return
		}
		// 切分, 格式不对，报错
		p := strings.Split(authStr, " ")
		if len(p) != 2 || p[0] != "Bearer" {
			controllers.ResponseError(c, controllers.CodeInvalidToken)
		}
		// 3. 解析token
		m, err := jwt.ParseToken(p[1])
		if err != nil {
			controllers.ResponseError(c, controllers.CodeInvalidToken)
			c.Abort()
			return
		}
		// 保存当前登录的用户信息，存入context 上下文当中去，并继续向下执行
		c.Set(controllers.ContextUserIDKey, m.UserID)
		c.Next()
	}
}
